package com.dingwen.treasure.kettle.base.enums;

import cn.hutool.core.map.MapUtil;
import com.dingwen.treasure.kettle.constant.SuppressWarningConstant;

import java.util.Map;

/**
 * 　BaseEnum </br>
 * <pre>
 *     1. 泛型说明： T: 枚举 code 返回值类型
 * </pre>
 * 　@author dingwen
 * 　@date 2022/6/15
 */
@SuppressWarnings(SuppressWarningConstant.ALL)
public interface BaseEnum<T> {

    /**
     * code 枚举值
     */
    String CODE = "code";

    /**
     * description 描述信息
     */
    String DESCRIPTION = "description";
    /**
     * to Map 方法名称反射调用
     */
    String TO_MAP_METHOD_NAME = "toMap";


    /**
     * 需要扫描的包路径
     */
    String SCAN_PACKAGE = "com.wh.kettle";

    /**
     * 获取枚举描述方法名称
     */
    String GET_ENUM_DESCRIPTION_METHOD = "getEnumDescription";

    /**
     * 枚举类名称
     */
    String ENUM_TYPE = "enum";

    /**
     * 枚举映射值
     */
    String ENUM_VALUE = "value";

    /**
     * 枚举名称（中文描述0
     */
    String ENUM_NAME = "name";

    /**
     * 查询所有枚举
     */
    String ALL = "ALL";

    /**
     * 获取代码
     *
     * @return {@link T}
     */
    T getCode();


    /**
     * 获取描述
     *
     * @return {@link String}
     */
    String getDescription();

    /**
     * 获取枚举类描述
     *
     * @return {@link String}
     */
    String getEnumDescription();


    /**
     * 后台枚举返回前端： 反射调用
     *
     * @return {@link Map}<{@link String}, {@link Object}>
     */
    default Map<String, Object> toMap() {
        Map<String, Object> map = MapUtil.newHashMap(2);
        map.put(CODE, getCode());
        map.put(DESCRIPTION, getDescription());
        return map;
    }

}
